/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Model;

import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JLabel;

/**
 *
 * @author Chronos
 */
public class TableDynamique extends AbstractTableModel {
    /**
     * Class qui contient la table dynamique
     * regroupant tous les contacts de l'utilisateur
     * @Xavier
     * @version 0.0.1
     */


    private final List<Contact> contacts = new ArrayList<Contact>();
    public List<Contact> getContacts(){
        return contacts;
    }

    private final String[] entetes = {"Name", "LastName", "Home Address",
        "Company Address", "PersMobPhone", "PersHomePhone","ProMobPhone",
        "ProOfficePhone", "Homepage","ProEmail", "PersEmail", "Photo",
        "Date registered", "Group"};

    // Constructeur qui ouvre le fichier contenant les contacts et les ajoute
    // un par un
    public TableDynamique(){
        super();
        
        try{
            String nomFichier = "contacts.txt";
            FileReader fr = new FileReader(nomFichier);
            BufferedReader buf = new BufferedReader(fr);           
            String ligne;
            //on lit la première ligne du fichier
            ligne = buf.readLine();
            // tant qu'il y a des lignes à lire (ligne != null)
            while (ligne != null) {
                
                String[] tabChaine = ligne.split(";");               
                contacts.add(new Contact(tabChaine[0],tabChaine[1],tabChaine[2],
                        tabChaine[3],tabChaine[4],tabChaine[5],tabChaine[6],
                        tabChaine[7],tabChaine[8],tabChaine[9],tabChaine[10],
                        tabChaine[11],tabChaine[12],tabChaine[13]));
                //on lit la ligne suivante
                ligne = buf.readLine();
                   
                }
          fr.close();
          }
       catch (FileNotFoundException e){
           System.out.println("Le fichier est introuvable !");
       }
       catch (IOException e) {
           System.out.println( e );
       }
    }

    // Fonction obligatoire pour la table //
    public int getRowCount() {
        return contacts.size();
    }

    public int getColumnCount() {
        return entetes.length;
    }

    public String getColumnName(int columnIndex) {
        return entetes[columnIndex];
    }
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch(columnIndex){
            case 0:
                return contacts.get(rowIndex).getName();
            case 1:
                return contacts.get(rowIndex).getLastname();
            case 2:
                return contacts.get(rowIndex).getHomeAdd();
            case 3:
                return contacts.get(rowIndex).getCompAdd();
            case 4:
                return contacts.get(rowIndex).getPersMobPhone();
            case 5:
                return contacts.get(rowIndex).getPersHomePhone();
            case 6:
                return contacts.get(rowIndex).getProMobPhone();
            case 7:
                return contacts.get(rowIndex).getProOfficePhone();
            case 8:
                return contacts.get(rowIndex).getHomepage();
            case 9:
                return contacts.get(rowIndex).getProEmail();
            case 10:
                return contacts.get(rowIndex).getPersEmail();
            case 11:
                return contacts.get(rowIndex).getPhoto();
            case 12:
                return contacts.get(rowIndex).getDateRegistered();
            case 13:
                return contacts.get(rowIndex).getVirtualGroup();
            default:
                return null; //Ne devrait jamais arriver
        }
    }
    public void addContact(Contact contact) {
        contacts.add(contact);
        fireTableRowsInserted(contacts.size() -1, contacts.size() -1);
    }

    public void removeContact(int rowIndex) {
        contacts.remove(rowIndex);
        fireTableRowsDeleted(rowIndex, rowIndex);
    }
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true; //Toutes les cellules sont éditables
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if(aValue != null){
            Contact contact = contacts.get(rowIndex);

            switch(columnIndex){
                case 0:
                    contact.setName((String)aValue);
                    break;
                case 1:
                    contact.setLastname((String)aValue);
                    break;
                case 2:
                    contact.setHomeAdd((String)aValue);
                    break;
                case 3:
                    contact.setCompAdd((String)aValue);
                    break;
                case 4:
                    contact.setPersMobPhone((String)aValue);
                    break;
                case 5:
                    contact.setPersHomePhone((String)aValue);
                    break;
                case 6:
                    contact.setProMobPhone((String)aValue);
                    break;
                case 7:
                    contact.setProOfficePhone((String)aValue);
                    break;
                case 8:
                    contact.setHomepage((String)aValue);
                    break;
                case 9:
                    contact.setProEmail((String)aValue);
                    break;
                case 10:
                    contact.setPersEmail((String)aValue);
                    break;
                case 11:
                    contact.setPhoto((String)aValue);
                    break;
                case 12:
                    contact.setDateRegistered((String)aValue);
                    break;
                case 13:
                    contact.setVirtualGroup((String)aValue);
                    break;
                }
        }
    }

}
